#!/bin/bash

# 设置证书信任状态的脚本
# 适用于 macOS 系统

set -e

echo "=== 设置证书信任状态 ==="

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

CERT_FILE="ssl/smartinput.crt"

# 检查证书文件
if [ ! -f "$CERT_FILE" ]; then
    log_error "找不到证书文件: $CERT_FILE"
    exit 1
fi

log_success "找到证书文件: $CERT_FILE"

# 显示证书信息
echo ""
echo "=== 证书信息 ==="
openssl x509 -in "$CERT_FILE" -text -noout | grep -A 5 "Subject Alternative Name"

# 检查证书是否已导入
echo ""
echo "=== 检查证书状态 ==="
if security find-certificate -c "192.168.137.122" ~/Library/Keychains/login.keychain-db > /dev/null 2>&1; then
    log_success "证书已存在于登录钥匙串"
else
    log_warning "证书未在登录钥匙串中找到"
    log_info "正在导入证书..."
    security import "$CERT_FILE" -k ~/Library/Keychains/login.keychain-db
    log_success "证书已导入到登录钥匙串"
fi

# 检查信任状态
echo ""
echo "=== 检查信任状态 ==="
if security find-trust-settings -d "192.168.137.122" ~/Library/Keychains/login.keychain-db > /dev/null 2>&1; then
    log_success "证书已设置为信任状态"
else
    log_warning "证书未设置为信任状态"
    echo ""
    log_info "需要手动设置证书信任状态"
fi

# 测试连接
echo ""
echo "=== 测试连接 ==="
log_info "测试 HTTPS 连接（忽略证书验证）:"
curl -k -s -I https://192.168.137.122/api/auth/test > /dev/null && log_success "HTTPS 连接正常" || log_error "HTTPS 连接失败"

log_info "测试 HTTPS 连接（验证证书）:"
curl -s -I https://192.168.137.122/api/auth/test > /dev/null && log_success "证书验证通过" || log_warning "证书验证失败，需要设置信任"

# 提供手动设置指导
echo ""
echo "=== 手动设置证书信任状态 ==="
log_info "如果证书验证失败，请按以下步骤手动设置信任状态："
echo ""
echo "1. 打开 '钥匙串访问' 应用"
echo "   - 在 Spotlight 中搜索 '钥匙串访问'"
echo "   - 或从 应用程序 > 实用工具 > 钥匙串访问"
echo ""
echo "2. 在左侧钥匙串列表中选择 '登录'"
echo ""
echo "3. 在搜索框中输入 '192.168.137.122'"
echo ""
echo "4. 找到证书后，双击打开"
echo ""
echo "5. 在证书详情窗口中："
echo "   - 点击 '信任' 部分"
echo "   - 将 '使用此证书时' 设置为 '始终信任'"
echo "   - 关闭窗口时会提示输入密码"
echo ""
echo "6. 重启浏览器并清除缓存"
echo ""
echo "7. 重新访问 https://192.168.137.122"
echo ""

# 提供命令行设置选项
echo "=== 命令行设置选项 ==="
log_info "您也可以尝试以下命令设置信任状态："
echo ""
echo "设置登录钥匙串信任："
echo "security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain-db $CERT_FILE"
echo ""
echo "设置系统钥匙串信任（需要管理员权限）："
echo "sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain $CERT_FILE"
echo ""

log_info "证书设置完成。请按照上述步骤手动设置信任状态。" 